package com.ck567.springbootnettyprotobufjava.codec;

import com.ck567.springbootnettyprotobufjava.message.Message;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageEncoder;
import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame;
import io.netty.handler.codec.http.websocketx.WebSocketFrame;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @description: 信息编码器
 * *  数据包格式
 * * +——-----——+——-------——+
 * * |  类型(2)|     数据   |
 * *+——-----——+——-------——+
 */
@Slf4j
@Component
@ChannelHandler.Sharable
public class MessageEncoder extends MessageToMessageEncoder<Message> {

    @Override
    protected void encode(ChannelHandlerContext ctx, Message msg, List<Object> out) throws Exception {
        ByteBuf outBuf = ctx.alloc().buffer();
        Short type = msg.getType();
        byte[] data = msg.getMsg().toByteArray();
        // 写入操作数
        outBuf.writeShort(type);
        // 写入数据体
        outBuf.writeBytes(data);
        WebSocketFrame frame = new BinaryWebSocketFrame(outBuf);
        out.add(frame);
    }
}
